package main

//
///*
//#cgo LDFLAGS: -L.  -lsoraka -lstdc++
//#include <stdio.h>
//#include <string.h>
//#include <stdlib.h>
//#include <stdbool.h>
//#include "crpc.h"
//
//// 全局变量，用于标志 Go 回调是否已被调用
//static bool callback_triggered = false;
//
//// 导出函数供 Go 查询回调状态
//extern bool is_callback_triggered() {
//   return callback_triggered;
//}
//
//// 消息处理回调函数，严格按照 crpc.h 中的定义
//// 实现 message_proc（原缺失的实现）
//SRPC_RESULT message_proc(int msgType, const char* service, const char* routine,
//                       const char* payload, const char* sender, const char* target,
//                       const char* peerIP, SRPC_DATABUF retdata, const void* userptr) {
//   printf("[消息处理] 类型=%d, 服务=%s, 方法=%s\n", msgType, service, routine);
//   if (msgType == 2) { // 仅当是请求类型时触发
//       callback_triggered = true;
//       const char* resp = "{\"status\":\"success\"}";
//       srpc_databuf_assign(retdata, resp, strlen(resp));
//   }
//   return SRPC_SOK;
//}
//// 连接成功回调函数
//void connready_cb(const char * jsonstr, const void * userptr) {
//	//callback_triggered = true; // 标记回调已触发
//	printf("[连接状态] 已成功连接到引擎，信息: %s\n", jsonstr);
//}
//
//// 连接断开回调函数
//void connreset_cb(uint32_t retcode, const void * userptr) {
//	//callback_triggered = false; // 标记回调未触发
//	printf("[连接状态] 与引擎断开连接，错误码: %u\n", retcode);
//}
//*/
//import "C"
//import (
//	"fmt"
//	"time"
//	"unsafe"
//)
//
//func waitForCallback(timeout time.Duration) bool {
//	start := time.Now()
//	for {
//		if C.is_callback_triggered() {
//			return true // 回调已触发
//		}
//		if time.Since(start) > timeout {
//			return false // 超时未触发
//		}
//		time.Sleep(100 * time.Millisecond) // 避免忙等待
//	}
//}
//
//func mynewfunc2() {
//	//func main() {
//	// 1. 创建消息处理器
//	dealer := C.srpc_dealer_create(
//		C.srpc_message_proc(C.message_proc), //将C函数message_proc转换为srpc_message_proc类型的函数指针
//		C.srpc_connready_cb(C.connready_cb),
//		C.srpc_connreset_cb(C.connreset_cb),
//		nil,
//	)
//	if dealer == nil {
//		fmt.Println("Failed to create dealer")
//		return
//	}
//	defer C.srpc_dealer_delete(dealer)
//	fmt.Println("Dealer created")
//
//	// 2. 添加服务（srpc_add_service）
//	serviceName := C.CString("MyService-yu")
//	serviceDesc := C.CString("TestService")
//	//serviceDefs := C.CString(`{"version":"1.0","methods":["ping"]}`) // 更完整的定义
//	//serviceRtns := C.CString(`{"outputs":["result"]}`)               // 明确的返回定义
//	serviceDefs := C.CString("{}")
//	serviceRtns := C.CString("{}")
//	defer func() {
//		C.free(unsafe.Pointer(serviceName))
//		C.free(unsafe.Pointer(serviceDesc))
//		C.free(unsafe.Pointer(serviceDefs))
//		C.free(unsafe.Pointer(serviceRtns))
//	}()
//
//	//addResult := C.srpc_add_service(dealer, serviceName, serviceDesc, serviceDefs, serviceRtns)
//	addResult := C.srpc_add_service(dealer, serviceName, serviceDesc, nil, nil)
//	if C.srpc_result_failed(addResult) != 0 {
//		fmt.Printf("Failed to add service, code: %d\n", addResult)
//		return
//	}
//	fmt.Println("Service added")
//
//	// 3. 启动消息处理器（srpc_dealer_start）
//	addr := C.CString("192.40.32.100") // 消息网关地址
//	port := C.int(10080)               // 消息网关端口
//	defer C.free(unsafe.Pointer(addr)) // 释放地址内存
//
//	startResult := C.srpc_dealer_start(dealer, addr, port)
//	if C.srpc_result_failed(startResult) != 0 {
//		fmt.Printf("Start failed: %d\n", startResult)
//		return
//	}
//	fmt.Println("Service started")
//
//	//time.Sleep(time.Second * 1000)
//
//	//// 等待回调触发（最多等待10秒）
//	//fmt.Println("等待回调被调用...")
//	//if waitForCallback(20 * time.Second) {
//	//	fmt.Println("成功接收到回调！")
//	//} else {
//	//	fmt.Println("等待超时，未触发回调")
//	//}
//
//	for !C.is_callback_triggered() {
//
//	}
//	//等待位 for循环 调用回调函数
//}
//
//func main() {
//
//	go mynewfunc2()
//	/*for {
//
//	}*/
//	// 主线程保持运行
//	select {} // 比for{}更优的阻塞方式
//}
